/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.controlador;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.faces.event.ActionEvent;




import javax.inject.Inject;
import javax.inject.Named;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import pe.com.cotelasa.common.controlador.MBGenerico;

import pe.com.cotelasa.scp.controlador.backingBean.BKCategoriaArticulo;
import pe.com.cotelasa.scp.controlador.comando.ComandoActualizar;
import pe.com.cotelasa.scp.controlador.comando.ComandoGuardar;
import pe.com.cotelasa.scp.controlador.comando.ComandoVer;
import pe.com.cotelasa.scp.controlador.comando.IComando;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.URLPaginacion;
import pe.com.cotelasa.scp.dominio.service.IServicioCategoriaArticulo;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioParametro;
import pe.com.cotelasa.scp.entidad.CategoriaArticulo;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;

/**
 *
 * @author DESARROLLO01
 */
@Named(value = "MBCategoriaArticulo")
@Scope("session")
public class MBCategoriaArticulo extends MBGenerico implements IMantenedor, Serializable {

    private static Logger logger = Logger.getLogger(MBCategoriaArticulo.class);
    @Inject
    private BKCategoriaArticulo bkCategoriaArticulo;
    @Inject
    private IServicioCategoriaArticulo servicioCategoriaArticulo;
    @Inject
    private IServicioParametro servicioParametro;
    private IComando comando;
    private String URL;
    
    @Autowired
    BKSession session;

    public MBCategoriaArticulo() {
    }

    public void buscarListaCategorias() {

        CategoriaArticulo objCategoriaArticulo = new CategoriaArticulo();
        objCategoriaArticulo.setNombre(bkCategoriaArticulo.getCategoriaArticulo().getNombre());
        objCategoriaArticulo.setTipoInsumo(bkCategoriaArticulo.getCategoriaArticulo().getTipoInsumo());
        objCategoriaArticulo.setTipoMaterial(bkCategoriaArticulo.getCategoriaArticulo().getTipoMaterial());
        objCategoriaArticulo.setTipoCategoria(bkCategoriaArticulo.getCategoriaArticulo().getTipoCategoria());
        
        try {
            bkCategoriaArticulo.setLisCategoriaArticulosActivos(this.servicioCategoriaArticulo.listarCategoriasPorFiltro(objCategoriaArticulo));

        } catch (ServiceException e) {
            mostrarError("Ocurrieron algunos problemas al cargar la informacion. Vuelva a intentar.");
            logger.error(e.getMessage(), e);
        }

    }

    @Override
    public String nuevo() {

        comando = new ComandoGuardar(this);
        bkCategoriaArticulo.setCategoriaArticuloFormulario(new CategoriaArticulo());
        bkCategoriaArticulo.setLisCategoriaArticulosPadres(null);
        return URLPaginacion.CategoriaArticulo.URL_FORMULARIO_CATEGORIA_ARTICULO;
    }

    @Override
    public String editar() {

        comando = new ComandoActualizar(this);
        bkCategoriaArticulo.setCategoriaModificar(bkCategoriaArticulo.getCategoriaArticuloFormulario().getNombre());
        bkCategoriaArticulo.setLisCategoriaArticulosPadres(null);
        try {
            if (bkCategoriaArticulo.getCategoriaArticuloFormulario().getTipoCategoria() == 'H') {
                bkCategoriaArticulo.setLisCategoriaArticulosPadres(servicioCategoriaArticulo.listarCategoriasPadres());
                bkCategoriaArticulo.setIdCategoriaArticuloPadre(bkCategoriaArticulo.getCategoriaArticuloFormulario().getIdCategoriaArticulo().getId());
            } else {
                bkCategoriaArticulo.setLisCategoriaArticulosPadres(null);
            }
        } catch (ServiceException e) {
            mostrarError("Ocurrieron algunos problemas al guardar la informacion. Vuelva a intentar.");
            logger.error(e.getMessage(), e);
        }
        return URLPaginacion.CategoriaArticulo.URL_FORMULARIO_CATEGORIA_ARTICULO;
    }

    @Override
    public String ver() {
        comando = new ComandoVer(this);
        return URLPaginacion.CategoriaArticulo.URL_VER_CATEGORIA_ARTICULO;
    }

    public String guardar() {
        CategoriaArticulo categoriaArticulo = bkCategoriaArticulo.getCategoriaArticuloFormulario();
        categoriaArticulo.setUsrCreacion(session.getUsuario().getUsuario());
        categoriaArticulo.setFecCreacion(new Date());
        try {
            if (servicioCategoriaArticulo.validarCategoriaArticulo(categoriaArticulo)) {
                if (bkCategoriaArticulo.getIdCategoriaArticuloPadre() != null) {
                    CategoriaArticulo padre = servicioCategoriaArticulo.conseguirCategoriaArticuloPorId(bkCategoriaArticulo.getIdCategoriaArticuloPadre());
                    categoriaArticulo.setIdCategoriaArticulo(padre);
                    categoriaArticulo.setTipoMaterial(padre.getTipoMaterial());
                    categoriaArticulo.setTipoInsumo(padre.getTipoInsumo());
                }
                servicioCategoriaArticulo.guardarCategoriaArticulo(categoriaArticulo);
                mostrarMensaje("Se guardo la Categoria satisfactoriamente.");
                //URL = mostrarMantenimiento();
                buscarListaCategorias();
                URL = URLPaginacion.CategoriaArticulo.URL_LISTA_CATEGORIA_ARTICULO;
            } else {
                mostrarError("Ya existe una Cateogria con este nombre");
                URL = URLPaginacion.CategoriaArticulo.URL_FORMULARIO_CATEGORIA_ARTICULO;
            }
        } catch (ServiceException e) {
            mostrarError("Ocurrieron algunos problemas al guardar la informacion. Vuelva a intentar.");
            logger.error(e.getMessage(), e);
            URL = URLPaginacion.CategoriaArticulo.URL_FORMULARIO_CATEGORIA_ARTICULO;
        }


        return URL;
    }

    @Override
    public String actualizar() {
        try {
            boolean band = true;
            if (!bkCategoriaArticulo.getCategoriaModificar().equals(bkCategoriaArticulo.getCategoriaArticuloFormulario().getNombre())) {
                band = servicioCategoriaArticulo.validarCategoriaArticulo(bkCategoriaArticulo.getCategoriaArticuloFormulario());
            }

            if (band) {
                CategoriaArticulo categoriaArticulo = bkCategoriaArticulo.getCategoriaArticuloFormulario();
                categoriaArticulo.setUsrModificacion(session.getUsuario().getUsuario());
                categoriaArticulo.setFecModificacion(new Date());
                if (bkCategoriaArticulo.getIdCategoriaArticuloPadre() != null) {
                    CategoriaArticulo padre = servicioCategoriaArticulo.conseguirCategoriaArticuloPorId(bkCategoriaArticulo.getIdCategoriaArticuloPadre());
                    categoriaArticulo.setIdCategoriaArticulo(padre);
                    categoriaArticulo.setTipoMaterial(padre.getTipoMaterial());
                    categoriaArticulo.setTipoInsumo(padre.getTipoInsumo());
                }
                servicioCategoriaArticulo.actualizarCategoriaArticulo(bkCategoriaArticulo.getCategoriaArticuloFormulario());
                mostrarMensaje("Se actualizo los datos de la Categoria satisfactoriamente.");
                //URL = mostrarMantenimiento();
                buscarListaCategorias();
                URL = URLPaginacion.CategoriaArticulo.URL_LISTA_CATEGORIA_ARTICULO;
            } else {
                mostrarError("Ya existe una Categoria con este nombre");
                URL = URLPaginacion.CategoriaArticulo.URL_FORMULARIO_CATEGORIA_ARTICULO;
            }
            
        } catch (ServiceException e) {
            mostrarError("Ocurrieron algunos problemas al actualizar la informacion. Vuelva a intentar.");
            logger.error(e.getMessage(), e);
            URL = URLPaginacion.CategoriaArticulo.URL_FORMULARIO_CATEGORIA_ARTICULO;
        }


        return URL;
    }

    public String mostrarMantenimiento() {

        bkCategoriaArticulo.setCategoriaArticulo(new CategoriaArticulo());
        bkCategoriaArticulo.getCategoriaArticulo().setTipoCategoria('%');
        bkCategoriaArticulo.getCategoriaArticulo().setTipoInsumo('%');
        bkCategoriaArticulo.getCategoriaArticulo().setTipoMaterial('%');
        bkCategoriaArticulo.getCategoriaArticulo().setNombre("");
        bkCategoriaArticulo.setLisCategoriaArticulosActivos(null);
        cargarCombo();

        return URLPaginacion.CategoriaArticulo.URL_LISTA_CATEGORIA_ARTICULO;
    }

    @Override
    public void eliminar(ActionEvent actionEvent) {
        CategoriaArticulo categoriaArticulo = bkCategoriaArticulo.getCategoriaArticuloSelccionado();
        categoriaArticulo.setUsrModificacion(session.getUsuario().getUsuario());
        categoriaArticulo.setFecModificacion(new Date());        
        categoriaArticulo.setEstadoRegistro(ESTADO_REGISTRO.INACTIVO.getValor());
        try {
            servicioCategoriaArticulo.actualizarCategoriaArticulo(categoriaArticulo);
            bkCategoriaArticulo.setLisCategoriaArticulosActivos(servicioCategoriaArticulo.listarCategoriasPorFiltro2(bkCategoriaArticulo.getCategoriaArticulo()));
            mostrarMensaje("Se elimino la Categoria satisfactoriamente");
        } catch (ServiceException e) {
            mostrarError("Ocurrieron algunos problemas al eliminar la informacion. Vuelva a intentar.");
            logger.error(e.getMessage(), e);
        }
    }

    public void buscarCategoriasPadre() {
        try {
            if (bkCategoriaArticulo.getCategoriaArticuloFormulario().getTipoCategoria() == 'H') {
                bkCategoriaArticulo.setLisCategoriaArticulosPadres(servicioCategoriaArticulo.listarCategoriasPadres());
            } else {
                bkCategoriaArticulo.setLisCategoriaArticulosPadres(null);
                bkCategoriaArticulo.setIdCategoriaArticuloPadre(null);
            }
        } catch (ServiceException e) {
            e.printStackTrace();
            mostrarError("Ocurrieron algunos problemas al eliminar la informacion. Vuelva a intentar.");
            logger.error(e.getMessage(), e);
        }
    }

    private void cargarCombo() {
        try {
            bkCategoriaArticulo.setListaTipoArticulo(servicioParametro.listarTipoArticuloActivos());
            bkCategoriaArticulo.setListaTipoCategoria(servicioParametro.listarTipoCategoriaActivos());
            bkCategoriaArticulo.setListaTipoMaterial(servicioParametro.listarTipoMaterialActivos());
        } catch (ServiceException e) {
            e.printStackTrace();
            logger.error(e.getMessage(), e);
            mostrarError("Ocurrio un error al cargar la informacion.");
        }
    }

    @Override
    public String aceptar() {
        try {
            servicioCategoriaArticulo.actualizarCategoriaArticulo(bkCategoriaArticulo.getCategoriaArticuloFormulario());
            bkCategoriaArticulo.setCategoriaArticuloFormulario(servicioCategoriaArticulo.conseguirCategoriaArticuloPorId(1));
            bkCategoriaArticulo.setLisCategoriaArticulosActivos(servicioCategoriaArticulo.listarCategoriasArticulosActivos());
            bkCategoriaArticulo.setLisCategoriaArticulosPadres(servicioCategoriaArticulo.listarCategoriasPadres());
        } catch (Exception e) {
            mostrarError("Ocurrieron algunos problemas al actualizar la informacion. Vuelva a intentar.");
        }
        return URLPaginacion.CategoriaArticulo.URL_LISTA_CATEGORIA_ARTICULO;
    }

    public IComando getComando() {
        return comando;
    }

    @Override
    public String retroceder() {
        return URLPaginacion.CategoriaArticulo.URL_LISTA_CATEGORIA_ARTICULO;
    }

    @Override
    public String cancelar() {
        //return mostrarMantenimiento();
        return URLPaginacion.CategoriaArticulo.URL_LISTA_CATEGORIA_ARTICULO;
    }
}
